Dim TransactionIds As Collection

Private Sub UserForm_Initialize()
    ' تحميل أسماء العملاء في ComboBox1 من ورقة العمل "Customer"
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets("Customer")
    
    Dim LastRow As Long
    LastRow = ws.Cells(ws.Rows.Count, "B").End(xlUp).Row ' تحديد آخر صف يحتوي على بيانات
    
    Me.ComboBox1.Clear
    For i = 2 To LastRow ' تجاهل الصف الأول لأنه يحتوي على العناوين
        Me.ComboBox1.AddItem ws.Cells(i, 2).Value ' اسم العميل في العمود B
    Next i
    
    ' إعداد مجموعة لتخزين Transaction Id لكل عميل
    Set TransactionIds = New Collection
    
    ' إضافة اختيارات "له" و "عليه" إلى ComboBox2
    Me.ComboBox2.AddItem "له"
    Me.ComboBox2.AddItem "عليه"
    
    ' تحديد "له" كقيمة افتراضية لـ ComboBox2
    Me.ComboBox2.Value = "له"
    
    Me.TextBox1.Locked = True ' تعيين الخاصية Locked إلى True لمنع الكتابة فيه
End Sub

Private Sub ComboBox1_Change()
    ' عند تغيير اختيار العميل في ComboBox1
    Me.TextBox1.Value = Me.ComboBox1.Value
End Sub

Private Sub ComboBox2_Change()
    ' عند تغيير اختيار نوع العملية في ComboBox2
    Dim amount As Double
    ' تحويل قيمة المبلغ إلى عدد عائم
    amount = Val(Me.TextBox2.Value)
    
    If Me.ComboBox2.Value = "له" Then
        ' إذا كان الاختيار "له"، قم بإضافة المبلغ بالموجب
        Me.TextBox2.Value = amount
    ElseIf Me.ComboBox2.Value = "عليه" Then
        ' إذا كان الاختيار "عليه"، قم بإضافة المبلغ بالسالب
        Me.TextBox2.Value = -amount
    End If
End Sub

Private Sub CommandButton1_Click()
    ' تحقق من وجود اسم العميل في ComboBox1 قبل الحفظ
    If Me.ComboBox1.Text = "" Then
        MsgBox "يرجى اختيار اسم العميل من ComboBox1 قبل الحفظ!"
        Exit Sub
    End If
    
    ' تحقق من أن تم اختيار نوع العملية من ComboBox2
    If Me.ComboBox2.Text = "" Then
        MsgBox "يرجى اختيار نوع العملية من ComboBox2 قبل الحفظ!"
        Exit Sub
    End If
    
    ' تحقق من أن المبلغ الموجود في TextBox2 هو رقم صحيح ولا يساوي صفر
    Dim amount As Double
    If Not IsNumeric(Me.TextBox2.Text) Then
        MsgBox "المبلغ يجب أن يكون رقم صحيح!"
        Exit Sub
    Else
        amount = CDbl(Me.TextBox2.Text)
        If amount = 0 Then
            MsgBox "المبلغ يجب أن يكون غير مساوٍ للصفر!"
            Exit Sub
        End If
    End If
    
    ' تحقق من أن جميع الحقول غير فارغة
    If Trim(Me.TextBox3.Text) = "" Or Trim(Me.TextBox4.Text) = "" Then
        MsgBox "يرجى ملء جميع الحقول قبل الحفظ!"
        Exit Sub
    End If

    ' حفظ البيانات في ورقة العمل "DebtPayment"
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets("DebtPayment")
    
    Dim CurrentCustomerId As String
    CurrentCustomerId = Me.ComboBox1.Text
    
    ' البحث عن آخر "Transaction Id" لنفس "Customer Id"
    Dim LastTransactionId As Long
    LastTransactionId = GetLastTransactionId(CurrentCustomerId)
    
    ' زيادة الـ "Transaction Id" بواحد
    Dim currentTransactionId As Long
    currentTransactionId = LastTransactionId + 1
    
    Dim LastRow As Long
    LastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row + 1
    
    ws.Cells(LastRow, 1).Value = CurrentCustomerId ' اسم العميل
    ws.Cells(LastRow, 2).Value = currentTransactionId ' رقم العملية
    ws.Cells(LastRow, 3).Value = amount ' المبلغ
    ws.Cells(LastRow, 4).Value = Me.TextBox3.Text ' التاريخ
    ws.Cells(LastRow, 5).Value = Me.TextBox4.Text ' التفاصيل
    ws.Cells(LastRow, 6).Value = Me.ComboBox2.Text ' نوع العملية
    
    ' إعادة تعيين الحقول بعد الحفظ
    Me.ComboBox1.Text = ""
    Me.TextBox1.Text = ""
    Me.TextBox2.Text = ""
    Me.TextBox3.Text = ""
    Me.TextBox4.Text = ""
    Me.ComboBox2.Text = ""
    
    ' إضافة العميل ورقم العملية الجديدة إلى المجموعة
    Dim newRecord As Variant
    newRecord = Array(CurrentCustomerId, currentTransactionId)
    TransactionIds.Add newRecord
    
    MsgBox "تم حفظ البيانات بنجاح!"
End Sub



Private Function GetLastTransactionId(customerId As String) As Long
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets("DebtPayment")
    
    Dim LastRow As Long
    LastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
    
    Dim i As Long
    Dim LastTransactionId As Long
    LastTransactionId = 0 ' قيمة افتراضية إذا لم يتم العثور على أي عمليات
    
    For i = 2 To LastRow ' يبدأ من الصف الثاني لتجاهل العنوان
        If ws.Cells(i, 1).Value = customerId Then
            ' عندما نجد عميلًا يتم تحديث القيمة
            LastTransactionId = ws.Cells(i, 2).Value
        End If
    Next i
    
    GetLastTransactionId = LastTransactionId
End Function

